博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
制作cpprefernce.chm
阅读量:6246 次
发布时间:2019-06-22

本文共 2845 字,大约阅读时间需要 9 分钟。

在关于C++的参考网站里,我觉得最好的就是cppreference了,然后某天某月的某一天,突然闪现一个想法,要把它作成chm。于是艰难地开始了。

标准C++并没有处理网页的功能,所以要么找库,要么换语言。根据我偶像书里的一句话,C++加python可以解决99.99%的问题,于是我把目光看向了python。不得不说刚开始学的时候挺坑爹的,劳资第一个python程序折腾了一下午,明明看起来一点问题都没有,就是不行,最后原因竟然是因为Tab键,当时我就骂街了。

后来慢慢算是入门了,我开始下网页。一开始,我问小木,有没有什么python的爬虫工具,结果被他一顿吐槽“你这个事情主要工作就是爬虫了,你交给工具来那你不就啥都没干”。于是只好自己来。中间出过一些问题,比如中途挂了,前功尽弃,于是我加了进度保存。代码如下:

网页下载以后,还要做一些加工,比如body下header与footer下的内容都要清除,链接也要改成本地链接等等。

然后还没等我开始第二阶段工作的时候,我发现我的爬虫做的不彻底。一些形如“ operator< ”的页面,它的链接为“ operator&lt ”,我并没有抓到。后来又修改了正则表达式,然而这时候我发现我下载不了cppreference的网页了,也许是连续一个多星期以来,我每天都反反复复地下来下去,人家把我拉黑了吧。于是我最新写的正则表达式,效果如何,又会带来什么新问题,都不得而知了。这事就这样先放下了。

……几个月后……

我开始了第三阶段,网页不再是自己抓,而是直接下的离线版。最新的离线版是html_book_20151129,它的结构是这样的:

en下面存放的是html,已经加工过了,可以直接编译成chm。common下放的是配置文件,css等。

使用的工具是easy chm,还要下载hhc.exe和hha.dll,这是微软的用来编译chm的工具;然后下载 itcc.dll 和 itircl.dll 并注册,如果没有它们,编译出来的chm会不支持搜索。把它们全都放到easyCHM.exe的同级目录下。打开程序,新建工程,目录选择/reference/en,然后在搜索选项->其他下,把“自动替换下划线为空格”取消,按确定。

然后界面是这样的:

刚开始问题很多:基本每条目录后面都带着“-cppreference.com”;目录下,只有图标为问号的叶节点有对应的html,图标为书本的父结点没有;极个别链接的地址不对;一些符号如<显示为&lt。这些问题根据个人喜好,可以改也可以不改。下面讲一个示例问题。

如图所示,上面的排版问题。直接用浏览器打开是正常的,编译成chm以后就不换行了。用一个稍微高级点的浏览器查看一下,结果是这样的:

只能理解为微软的IE不支持这种风格了。去w3c查了一下(搜css display),把方式改为block即可。

我在制作的时候,绝大部分时候花在改标题改链接上了,改到想吐。最后得到一个结论:要参考直接上网站不就好了!

……一年以后……

推荐使用zeal这款软件,它下载的离线文档正是cppreference的,虽然目录有些乱,但是可以搜索,而且更新频率要高于官网的离线文档。

 

转载于:https://www.cnblogs.com/lzxskjo/p/5289600.html

你可能感兴趣的文章
安装用于跨平台移动开发的 Visual C++
查看>>
kafka-manager 的编译和使用(附安装包)
查看>>
JDK1.8源码(五)——java.util.ArrayList 类
查看>>
Spring Data JPA 实例查询
查看>>
.NET成年了,然后呢?
查看>>
Leaf——美团点评分布式ID生成系统
查看>>
Redis集群中的节点如何保证数据一致
查看>>
jsp里面不能使用${pageContext.request.contextPath}解决方案
查看>>
Spring注解之 @EnableScheduling计划任务注解
查看>>
解决 IDEA 中src下xml等资源文件无法读取的问题
查看>>
error: each element of 'ext_modules' option must be an Extension instance or 2-tuple
查看>>
(总结)Nginx配置文件nginx.conf中文详解
查看>>
openssl用法详解
查看>>
[Java web]Spring+Struts2+Hibernate整合过程(2)
查看>>
基于ThinkPHP与阿里大于的PHP短信验证功能
查看>>
ASP.NET Core 2 学习笔记(十二)REST-Like API
查看>>
react 调用 function 的写法 及 解决 react onClick 方法自动执行
查看>>
adb 切换android输入法
查看>>
OSAL工作机制分析
查看>>
Spring Cloud入门教程(二):客户端负载均衡(Ribbon)
查看>>